#ifndef __WHIMSY_PROPERTY_VISITOR_HPP__SHANHAOBO_19800429__
#define __WHIMSY_PROPERTY_VISITOR_HPP__SHANHAOBO_19800429__

#include "./WhimsyObjectBase.hpp"
#include "./WhimsyPropertyForwardDeclare.hpp"

namespace Whms
{
    namespace Property
    {
        //////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////

        namespace Visitor
        {
            struct Type : public ::Whms::Object::Base::Type
            {
                typedef ::Whms::Object::Base::Type          tVisitableBase;

                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Int8::Ref)     = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Int16::Ref)    = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Int32::Ref)    = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Int64::Ref)    = WIZ_NULL;

                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::UInt8::Ref)    = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::UInt16::Ref)   = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::UInt32::Ref)   = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::UInt64::Ref)   = WIZ_NULL;

                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Real32::Ref)   = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Real64::Ref)   = WIZ_NULL;

                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Vec2::Ref)     = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Vec3::Ref)     = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::Vec4::Ref)     = WIZ_NULL;
                
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::IntVec2::Ref)  = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::IntVec3::Ref)  = WIZ_NULL;
                virtual ::Whms::Void::Type Visit(::Whms::Property::Base::IntVec4::Ref)  = WIZ_NULL;
            }; /// struct Type
            WIZ_DECLARE(::Whms::Property::Visitor::Type);
        } /// namespace Visitor

        //////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////
    } /// end of namespace Property
} /// end of namespace Whms

#endif /*__WHIMSY_PROPERTY_VISITOR_HPP__SHANHAOBO_19800429__*/
